//
// Created by GF on 2023/11/2.
//

#include <stdio.h> /* sscanf(); */
#include <stdlib.h> /* atoi(); */
#include <time.h> /* mktime(); */
#include "DateTime_Function.h"

/* 通过 mktime() 生成日期时间戳 */
int TimeStamp_By_mktime(int Year, int Month, int Day) {

    /*
     * <time.h> 中定义的 time_t 是 long int 类型(64位系统), 或者 long long int 类型(32位系统).
     * 也就是说, time_t 数据类型始终占8个字节.
     */
    time_t Res_Sec = 0;
    /* ********************************************** */
    struct tm p;
    /* ********************************************** */
    p.tm_year = Year - 1900;
    p.tm_mon = Month - 1;
    p.tm_mday = Day;
    p.tm_hour = 0;
    p.tm_min = 0;
    p.tm_sec = 0;
    p.tm_isdst = 0;
    /* ********************************************** */
    Res_Sec = mktime(&p);
    /* ********************************************** */
    /*
     * Additional knowledge:
     *
     * time_t time(time_t *_Time):
     *
     * time(&Res_Sec) 函数将现在的时间转换成秒并保存在 Res_Sec 变量中.
     * time(&Res_Sec);
     */
    /* ********************************************** */
    return Res_Sec;
}

/* 通过 mktime() 生成日期时间戳 - String版 */
int TimeStamp_By_mktime_StrVer(char* Datetime) {

    int YearInt, MonthInt, DayInt;
    char YearStr[5], MonthStr[3], DayStr[3];
    /* ********************************************** */
    sscanf(Datetime, "%[0-9]-%[0-9]-%[0-9]", YearStr, MonthStr, DayStr);
    /* ********************************************** */
    YearInt = atoi(YearStr);
    MonthInt = atoi(MonthStr);
    DayInt = atoi(DayStr);
    /* ********************************************** */
    /* Calling Other Function: 通过 mktime() 生成日期时间戳 */
    time_t Res_Sec = TimeStamp_By_mktime(YearInt, MonthInt, DayInt); /* 创建并赋值 time_t 类型数据 */
    /* ********************************************** */
    return Res_Sec;
}